Tag: layout manager

比Box更有效的布局

我有一些非常古老的代码,它使用Box列出一些信息。 我这样创建它: Box patterns = Box.createVerticalBox(); 非常(非常)经常添加新项目并删除旧项目,例如: label = new JLabel(“xyz”); patterns.add(label); 然后 patterns.remove(label); 每当添加一些东西时,我必须重新涂抹,所以我打电话给: patterns.revalidate(); patterns.repaint(); 问题是,因为这种情况经常发生,所以它会占用UI。 我认为我需要一个更好的实现,以使其更有效。 我知道我可以在后台维护一个活动项目列表,然后间歇性地更新实际UI(批量更新)但是… 有人可以提出更有效的替代方法吗?

如何将组件添加到JDialog

d1=new JDialog(); d1.setSize(200, 100); t1=new JTextField(); t1.setBounds(10,10,40,20); d1.add(t1); 我想在JDialog中添加组件,例如TextField,Button ……

我怎样才能在Java中实现这种可扩展的布局? 灵活的BoxLayout等

我希望能够有三个JPanels p1 p2和p3,并让它们像这样布局: 我一直在玩FlowLayout,BoxLayout等,但我不确定我是否朝着正确的方向前进。 我是Java的新手,所以如果我很诚实,我不知道会发生什么。 我喜欢BoxLayout如何工作,调整面板大小,但我希望能够给它一些宽度属性。 我没有使用视觉设计师,这是我目前的窗口代码: private void initialize() { Dimension dimensions = Toolkit.getDefaultToolkit().getScreenSize(); frame = new JFrame(); frame.setLayout(new GridLayout(1, 3)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(dimensions.width / 2 – WINDOW_WIDTH / 2, dimensions.height / 2 – WINDOW_HEIGHT / 2, WINDOW_WIDTH, WINDOW_HEIGHT); JPanel p1 = new JPanel(new BorderLayout()); p1.setBackground(Color.red); JPanel p2 = new JPanel(new BorderLayout()); p2.setBackground(Color.black); JPanel p3 […]

java.awt.AWTError:BoxLayout无法共享

我在设置布局之前初始化了MotePanel,Command Panel和LEDPanel,那么我是如何得到这个例外的。 请帮忙。 Exception in thread “main” java.awt.AWTError: BoxLayout can’t be shared at javax.swing.BoxLayout.checkContainer(BoxLayout.java:462) at javax.swing.BoxLayout.invalidateLayout(BoxLayout.java:246) at javax.swing.BoxLayout.addLayoutComponent(BoxLayout.java:279) at java.awt.Container.addImpl(Container.java:1107) at java.awt.Container.add(Container.java:974) at javax.swing.JFrame.addImpl(JFrame.java:556) at java.awt.Container.add(Container.java:377) at Window.(Window.java:54) public class Window extends JFrame{ private JPanel MotePanel; private JPanel LEDPanel; private JPanel CommandPanel; private JCheckBox motes[]; private JRadioButton Leds[]; public Window(){ this.setLayout(new BoxLayout(this,BoxLayout.X_AXIS)); this.setTitle(“Sensor Networks Lab”); […]

使用具有null布局的JPanel

所以我有一个名为CalendarPanel的类,它扩展了JPanel 。 它使用null布局。 我如何使用CalendarPanel作为常规组件? 当我把它放在另一个JPanel然后将其添加到窗口时,它就会消失。 它只有在我直接添加到窗口时才可见。 编辑:是的,我意识到使用带有空布局的JPanel是不好的做法。 CalendarPanel实际上是别人的代码,我试图将它用于我的目的,而不必重构它。

如何让GridBagLayout尊重按钮或面板的最小尺寸?

在下面的GridBagLayout代码中,我希望在调整JFrame的大小以使其更小时,可以遵守指定的JButton btn2的最小大小。 但是当我使JFrame变小时,btn2会小于其最小尺寸然后消失。 有人能指出我正在做错的方向吗? 也许我必须设置包含按钮的JPanel的最小大小? 任何帮助表示赞赏,谢谢! JFrame frame = new JFrame(); frame.setSize(400,300); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); panel.setMinimumSize(new Dimension(400,300)); panel.setBackground(Color.RED); panel.setLayout(new GridBagLayout()); GridBagConstraints gbc = null; JButton btn1 = new JButton(“btn1”); btn1.setPreferredSize(new Dimension(150,50)); btn1.setMinimumSize(new Dimension(150,50)); gbc = new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0,0,0,0), 0, 0); panel.add(btn1, gbc); JButton […]

使用Java pack()方法

我不能使pack()方法工作。 我尝试了几件事。 我的代码目前看起来像这样: 第1类: public static void main( String[] args ) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { JavaGui mygui = new JavaGui(); // mygui.setSize(1154, 753); mygui.setVisible(true); mygui.pack(); 第2类: public class JavaGui extends javax.swing.JFrame { public JavaGui() { getContentPane().setLayout(null); .. getContentPane().add(panelLeft); … getContentPane().add(panelRight); 我尝试将pack方法放在任何地方,但它不能用这种方式添加gui元素。 有什么建议吗? 我也尝试将所有内容添加到JFrame而不是getContentPane(),但我也无法做到这一点。

将组件添加到JFrame内的JPanel中

由于我是初学者而且我不想参与布局管理器,我只是将JPanel添加到我的主JFrame中,并为面板中的每个组件提供特定位置。 但不知何故输出似乎太错了.. frame = new JFrame(email + ” (Offline)”); frame.setSize(400, 400); frame.setLocation(0, 0); frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); frame.setLayout(new FlowLayout()); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { // out.println(“BYE”); // out.flush(); frame.dispose(); thread.stop(); } }); panel = new JPanel(); frame.add(panel); chat = new JTextArea(); chat.setSize(400, 200); chat.setLocation(0, 0); chat.setEditable(false); panel.add(chat); panel.validate(); JLabel you = new JLabel(“You:”); you.setSize(you.getPreferredSize()); you.setLocation(0, […]

如何使用MigLayout?

我阅读了一些有关Java布局管理器的信息,建议是MigLayout 。 我的问题是,我没有找到任何教程或简单的逐步文档。 所以我想知道这一切是如何运作的,但我不知道如何。 希望,这不是微不足道的。 提前谢谢,guerda

始终位于右上角的Java布局与组件

我的应用程序的主GUI由框架内容窗格的CENTER中的JDesktopPane组成,使用BorderLayout。 我希望在屏幕的右上角放置一个组件,仍然允许用户将空间中的JInternalFrames拖到此组件的左侧和底部。 将组件设置为BorderLayout的NORTH或EAST似乎填满了整个空间。 我在想BorderLayout可能不是我想要完成的最好的布局管理器吗? 有关更好方法的任何建议吗?