問題があって解決策が見つかりましたが、この次のコードが機能しない理由を理解できません。 私がしたいのは、 "Administration.class"でボタンが押されたときにタブが切り替わるということです。 "Main.class"に追加されたJTabbedPaneを取得しました。これはプライベート変数として宣言されています。その後、アクションリスナーから親パネルのメソッドを呼び出す方法
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();
}
});
}
}ここで
基本的に、静的フィールドと非静的フィールドの違いについては、静的なものはクラスのすべてのオブジェクトで同じですが、非静的なフィールドはオブジェクトごとに異なる場合があります。一般的には、静的フィールドを避ける必要があります。 – GhostCat
定数を除きます。 – Majora320