我是Java Swing的新手。我对在Swing中动态调整组件有一些疑问。
基本上我有一个主JPanel
由两个子JPanel
(左侧面板和右面板)组成,它们水平排列。在左JPanel
我有一些JButtons
,当我愿意点击JButton
我需要在右JLabel
中显示一些JTextArea
,JPanel
等。我尝试了一个代码,但它不起作用。当我点击按钮时它进入事件监听器功能,但是JLabel
我无法查看。
我在下面给出了我的代码。请看看这个并纠正我。提前谢谢
package my;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
/**
*
* @author root
*/
public class myAplliwithPanel extends JFrame{
JPanel rightPanel;
public myAplliwithPanel() {
initGui();
}
public void initGui()
{
JPanel mainPanel=new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.X_AXIS));
JPanel leftPanel=new JPanel();
leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.Y_AXIS));
rightPanel=new JPanel();
rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.Y_AXIS));
JButton dbBut=new JButton("DB");
JButton appliBut=new JButton("Appli");
appliBut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
JLabel label=new JLabel("dsggs");
rightPanel.add(label);
}
});
JButton backendBut=new JButton("Backend");
leftPanel.add(dbBut);
leftPanel.add(appliBut);
leftPanel.add(backendBut);
mainPanel.add(leftPanel);
mainPanel.add(rightPanel);
add(mainPanel);
setTitle("System Manger");
setSize(400, 400);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
myAplliwithPanel myObj = new myAplliwithPanel();
myObj.setVisible(true);
}
});
}
}
答案 0 :(得分:19)
添加(或删除)组件后,您需要致电revalidate
:
rightPanel.add(label);
rightPanel.revalidate();
应该这样做。
答案 1 :(得分:11)
呼叫
rightPanel.revalidate();
rightPanel.repaint();
添加后
答案 2 :(得分:3)
添加标签后添加此行
rightPanel.updateUI();
在运行时添加任何组件时,需要使用此方法更新ui