我遇到了问题并找到了解决方案,但我无法理解为什么以下代码无效。 我想要做的是,当在“Administration.class”中按下按钮时,标签正在切换。 我有一个JTabbedPane,它被添加到“Main.class”中。它被声明为私有变量。
private JTabbedPane JPT;
然后我有一个简单的方法,在调用时将更改选项卡:
public void SetPane() {
JTP.setSelectedIndex(2);
}
然后我在Administration.class中创建Main.class的对象,并在按下按钮时调用此方法:
btnRework.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Main m = new Main();
m.SetPane();
}
});
但这不起作用。什么都没发生,当点击按钮时,我甚至没有错误。
这有效: Main.class
public static JTabbedPane JTP;
Administration.class
btnRework.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Main.JTP.setSelectedIndex(2);
}
});
为什么示例首先不起作用,也许你们有一个链接,在那里我可以看一下描述这个问题的内容。如果你只是想处理变量及其方法,那么更好的方法是什么? 提前谢谢!
Main.class:
public class Main extends JDialog {
private static final long serialVersionUID = 1L;
private Home home = new Home();
private Insertation insertation = new Insertation();
private Edit edit = new Edit();
private Administration administration = new Administration();
private Addition addition = new Addition();
public static JTabbedPane JTP;
/**
* Launch the application.
*/
public static void main(String[] args) {
try {
Main dialog = new Main();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the dialog.
*/
public Main() {
super(null, java.awt.Dialog.ModalityType.TOOLKIT_MODAL);
setResizable(false);
setSize(1030, 720);
getContentPane().setLayout(new BorderLayout());
setTitle("Ebay Manager");
JTP = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT);
JTP.addTab("Home", home);
JTP.addTab("Inserat", insertation);
JTP.addTab("Bearbeitung", edit);
JTP.addTab("Verwaltung", administration);
JTP.addTab("Zusatz", addition);
getContentPane().add(JTP);
}
}
Administration.class:
public class Administration extends JPanel {
private static final long serialVersionUID = 1L;
private JButton btnRework;
private Main main;
/**
* Create the panel.
*/
public Administration() {
setLayout(null);
setSize(1000, 650);
setDoubleBuffered(true);
btnRework = new JButton("Bearbeiten");
btnRework.setBounds(42, 571, 116, 32);
add(btnRework);
btnRework.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
main.SetPane();
}
});
}
}
答案 0 :(得分:0)
Main m = new Main();
m.SetPane();
在这里,您正在创建Main
的实例,但您不会在任何地方添加它。
修改强>
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
public class Administrator extends JFrame {
private Main main;
public Administrator() {
main = new Main();
add(main);
JButton button = new JButton("Set");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
main.setPane();
}
});
add(button, BorderLayout.SOUTH);
}
public static void main(String[] args) {
Administrator adminFrame = new Administrator();
adminFrame.setSize(400, 400);
adminFrame.setVisible(true);
}
}
class Main extends JPanel {
private JTabbedPane jtp;
public Main() {
super(new BorderLayout());
jtp = new JTabbedPane();
jtp.add("tab1", new JLabel("Content1"));
jtp.add("tab2", new JLabel("Content2"));
add(jtp);
}
public void setPane() {
jtp.setSelectedIndex(1);
}
}
答案 1 :(得分:0)
您正在创建一个新的未绘制框架中切换窗格,并将其丢弃在动作侦听器中。您需要在应用程序中(可能)打包并绘制的框架中切换窗格。
所以而不是
Main m = new Main();
m.SetPane();
你需要
myMainFrame.SetPane();
您创建和记住myMainFrame
的确切方式超出了此答案的范围(除非您在问题中添加更多代码)。
答案 2 :(得分:0)
由于rdonuk的回答,我找到了自己的解决方案。由于我不能创建Main.class的另一个实例,因此我在创建Main.class时将JTabbedPane设置为Administration.class中的变量。只是一个简单的setter方法。谢谢你的所有答案!