import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.*;
public class LauncherFrame extends JFrame implements ActionListener{
JPanel Title = new JPanel();
JPanel LeftSide = new JPanel();
JPanel RightSide = new JPanel();
JPanel BottomFooter = new JPanel();
JPanel MainCenter = new JPanel();
JButton nextBTN = new JButton();
JButton backBTN = new JButton();
JLabel TitleLabel = new JLabel();
JButton projectApp1 = new JButton();
JButton projectApp2 = new JButton();
JLabel appName = new JLabel();
int radius;
boolean Project1focused = true;
boolean Project2focused = false;
Border focusBorder = BorderFactory.createLineBorder(Color.green, 10);
int index = 2;
public LauncherFrame() {
Image img = Toolkit.getDefaultToolkit().getImage("logo.png");
ImageIcon img2 = new ImageIcon("logo.png");
ImageIcon iconT = new ImageIcon("tic-tac-toe-image.jpg");
Border border = BorderFactory.createLineBorder(new Color(0x89852A), 3);
//Title Panel
Title.setBackground(new Color(0xCD8028));
Title.setPreferredSize(new Dimension(this.getWidth(), 100));
Title.setBorder(border);
//Title Label
TitleLabel.setText("Banana Launcher");
TitleLabel.setFont(new Font("Source Code Pro", Font.BOLD, 50));
//Left Panel
LeftSide.setBackground(new Color(0xA0A0A0));
LeftSide.setPreferredSize(new Dimension(200, this.getHeight()));
LeftSide.setLayout(null);
LeftSide.add(backBTN);
//Right Panel
RightSide.setBackground(new Color(0xA0A0A0));
RightSide.setPreferredSize(new Dimension(200, this.getHeight()));
RightSide.setLayout(null);
RightSide.add(nextBTN);
//Footer
BottomFooter.setBackground(new Color(0x504F31));
BottomFooter.setPreferredSize(new Dimension(this.getWidth(), 75));
//Project/App to open 1
projectApp1.setIcon(iconT);
projectApp1.setBackground(Color.GRAY);
projectApp1.setBounds(325,150,255,255);
projectApp1.setFocusable(false);
projectApp1.setBorder(new RoundedBorder(10));
projectApp1.addActionListener(this);
//Project/App to open 2
projectApp2.setIcon(img2);
projectApp2.setBackground(Color.GRAY);
projectApp2.setBounds(60,150,255,255);
projectApp2.setFocusable(false);
projectApp2.setBorder(new RoundedBorder(10));
projectApp2.addActionListener(this);
//label to tell us what app we're on
appName.setText("hello");
appName.setForeground(Color.BLACK);
appName.setBounds(350,50,200,50);
appName.setFont(new Font(null, Font.BOLD, 50));
//Main Center
MainCenter.setBackground(new Color(0xE9E8CE));
MainCenter.setLayout(null);
MainCenter.setFocusable(false);
MainCenter.add(projectApp1);
MainCenter.add(projectApp2);
MainCenter.add(appName);
//Right Panel Button
nextBTN.setBackground(new Color(0x6F9023));
nextBTN.setBounds(10,212,130,125);
nextBTN.setBorder(new RoundedBorder(10));
nextBTN.setHorizontalAlignment(JButton.CENTER);
nextBTN.setText("Next->");
nextBTN.setFocusable(false);
nextBTN.setFont(new Font("Ink Free", Font.BOLD, 25));
nextBTN.setForeground(Color.BLACK);
nextBTN.addActionListener(this);
//Left Panel Button
backBTN.setBackground(new Color(0x6F9023));
backBTN.addActionListener(this);
backBTN.setBounds(60,212,130,125);
backBTN.setBorder(new RoundedBorder(10));
backBTN.setHorizontalAlignment(JButton.CENTER);
backBTN.setText("<-Back");
backBTN.setFocusable(false);
backBTN.setFont(new Font("Ink Free", Font.BOLD, 25));
backBTN.setForeground(Color.BLACK);
check();
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setSize(1300,850);
this.setLayout(new BorderLayout());
this.setLocationRelativeTo(null);
this.setTitle("Launcher");
Title.add(TitleLabel);
this.setIconImage(img);
this.add(Title, BorderLayout.NORTH);
this.add(LeftSide, BorderLayout.WEST);
this.add(RightSide, BorderLayout.EAST);
this.add(BottomFooter, BorderLayout.SOUTH);
this.add(MainCenter, BorderLayout.CENTER);
this.setVisible(true);
}
public void check() {
if(index==1) {
projectApp2.setBorder(focusBorder);
projectApp1.setBorder(null);
} else if(index==2) {
projectApp2.setBorder(null);
projectApp1.setBorder(focusBorder);
}
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==backBTN) {
System.out.println("hello");
check();
if(index==2) {
System.out.println("helloo");
index--;
}
}
if(e.getSource()==nextBTN) {
check();
System.out.println("hello");
if(index==1) {
System.out.println("helloo");
index =1;
}
}
}
}
它真的只是最后一點,索引被塞滿并且正在播放我需要一些幫助。如果你開始點擊相反的按鈕,下一步和后退按鈕也可以切換角色,這真的很煩人,我不知道如何解決這個問題。
uj5u.com熱心網友回復:
你必須check() 在狀態改變之后呼叫,而不是之前呼叫!
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==backBTN) {
System.out.println("hello");
if(index==2) {
System.out.println("helloo");
index--;
}
}
if(e.getSource()==nextBTN) {
System.out.println("hello");
if(index==1) {
System.out.println("helloo");
index =1;
}
}
check();
}
請注意,要編譯您的代碼,我必須洗掉那些new RoundedBorder()(我在任何地方都找不到該類),并且必須添加一個 main 方法:
public static void main(String[] args) {
SwingUtilities.invokeLater(LauncherFrame::new);
}
uj5u.com熱心網友回復:
我會創建一個專用的方法來選擇特定的頁面索引:
private void select(int i) {
// make sure the index stays in the range 1..2 (increment when adding more elements).
index = Math.max(1, Math.min(i, 2));
System.out.println("selected index: " index);
if (index == 1) {
projectApp2.setBorder(focusBorder);
projectApp1.setBorder(null);
}
if (index == 2) {
projectApp2.setBorder(null);
projectApp1.setBorder(focusBorder);
}
}
該check()方法可以被洗掉,并且初始選擇與完成select(1)。
您的操作偵聽器方法將如下所示:
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == backBTN) {
select(index - 1);
}
if (e.getSource() == nextBTN) {
select(index 1);
}
}
ActionListener按源實作然后分派事件是Swing 中的一個反模式。相反,為每個組件添加一個專用的動作偵聽器。由于這是@FunctionalInterface,您可以在Lambda 運算式中表達操作:
nextBTN.addActionListener(actionEvent -> select(index 1));
...
backBTN.addActionListener(actionEvent -> select(index - 1));
該implements ActionListener和actionPerformed(..)然后方法可以被洗掉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/363038.html
