我正在尝试将JPanel添加到标签页。
该面板是使用LanguageTab类创建的,但我无法弄清楚它为什么不起作用。
这可能是愚蠢的,但自我教导在这里还不够。
希望有人能给我一点帮助。谢谢!
我在这里有我的代码,让你了解我正在经历的事情!
public class MainTab extends JPanel {
JTabbedPane mainTab;
JPanel languageTab;
JFrame mainFrame;
JPanel mainPanel;
public MainTab(){
mainFrame = new JFrame();
mainTab = new JTabbedPane();
mainPanel = new JPanel();
//mainPanel.add(new JTextField("ciao"));
mainPanel.add(new JLabel(new ImageIcon("C:\\Users\\angelica\\Desktop\\developed.jpg")));
//languageTab = new LanguageTab();
mainTab.add("main",mainPanel);
mainTab.add("Language Tab",languageTab);
add(mainTab);
mainFrame.add(mainTab);
mainFrame.setVisible(true);
mainFrame.setDefaultLookAndFeelDecorated(true);
}
public static void main(String args[]){
MainTab mt = new MainTab();
}
}
这是我的LanguageTab
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
公共类LanguageTab扩展JPanel实现ActionListener {
public LanguageTab(){
ImageIcon icona = new ImageIcon("C:\\Users\\angelica\\workspace\\whatever\\src\\whatever\\ita.jpg");
ImageIcon icona_DSA = new ImageIcon("C:\\Users\\angelica\\workspace\\whatever\\src\\whatever\\ita2.jpg");
ImageIcon iconb = new ImageIcon("C:\\Users\\angelica\\workspace\\whatever\\src\\whatever\\brit.jpg");
ImageIcon iconb_DSA =new ImageIcon("C:\\Users\\angelica\\workspace\\whatever\\src\\whatever\\brit2.jpg");
JPanel langTab= new JPanel();
langTab.setLayout(new GridLayout(2,2));
JButton ADHDbutton = new JButton("ADHD ENGLISH");
ADHDbutton.setIcon(iconb);
ADHDbutton.setActionCommand("adhd_english");
ADHDbutton.addActionListener(this);
JButton ADHDbutton1 = new JButton("ADHD \n ITALIANO");
ADHDbutton1.setIcon(icona);
ADHDbutton1.setActionCommand("adhd_italiano");
ADHDbutton1.addActionListener(this);
JButton DSAbutton = new JButton("DSA ENGLISH");
DSAbutton.setIcon(iconb_DSA);
DSAbutton.setActionCommand("dsa_english");
DSAbutton.addActionListener(this);
JButton DSAbutton1 = new JButton("DSA ITALIANO");
DSAbutton1.setIcon(icona_DSA);
DSAbutton1.setActionCommand("dsa_italiano");
DSAbutton1.addActionListener(this);
langTab.add(ADHDbutton);
langTab.add(ADHDbutton1);
langTab.add(DSAbutton);
langTab.add(DSAbutton1);
//return toModify;
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
}
答案 0 :(得分:0)
您需要设置JFrame
的大小,以便它足够大以查看其内容。
将以下内容添加为MainTab
构造函数的最后一行:
mainFrame.setSize(new Dimension(300, 300));
此外,在LanguageTab
构造函数中,当类本身(langTab
)应该代表语言选项卡时,您有一个名为this
的变量。然后,将所有按钮添加到langTab
,然后再对其执行任何操作。
删除变量langTab
,使用this
构造函数中的LanguageTab
替换每次调用。那么你的构造函数应该是这样的:
public LanguageTab() {
// button initialization goes here...
this.add(ADHDbutton);
this.add(ADHDbutton1);
this.add(DSAbutton);
this.add(DSAbutton1);
}
现在您的问题已经得到解答,如果您不介意我想提出一些可能会提高您未来代码质量的方法。
仅在必要时使用全局变量。
为变量提供尽可能小的范围
package
范围。正如我之前提到的,由于各种原因通常需要使swing组件全局化,但是它们几乎不需要具有大于private
的范围(因此它们只能在它们所在的类中访问)宣布。以“静态方式”访问静态方法。
JFrame
调用setDefaultLookAndFeelDecorated()
的{{1}}方法。 mainFrame
是mainFrame
类的实例(您通过说JFrame
声明了它),因此您只能使用它来调用 instance 方法。 mainFrame = new JFrame()
是一个静态方法(使用关键字 static 声明),因此应使用类名称进行访问:setDefaultLookAndFeelDecorated()
请注意参考类型。
JFrame.setDefaultLookAndFeelDecorated(true)
变量(在languageTab
类中)声明为MainTab
。 JPanel没有像JPanel
那样实现ActionListener
界面,因此通过将变量声明为LanguageTab
,您无法在其上调用JPanel
(或者更可能将它设置为某些swing组件的动作侦听器。)按照惯例,Java中的变量应以小写字母开头。
actionPerformed()
类名称中给出了以大写字母开头的四个按钮。 Java约定用于以小写字母开头的变量名称,就像类应以大写字母开头一样。