Java 在图像顶部放置按钮?
所以我正在努力让它工作。正在尝试制作一个小型调优应用程序。我想把按钮放在背景图像(图像是吉他主轴箱)的适当调谐钉的顶部。但是,我不知道如何使用流布局来管理它。我可能很愚蠢,但有人能告诉我这里发生了什么吗Java 在图像顶部放置按钮?,java,swing,Java,Swing,所以我正在努力让它工作。正在尝试制作一个小型调优应用程序。我想把按钮放在背景图像(图像是吉他主轴箱)的适当调谐钉的顶部。但是,我不知道如何使用流布局来管理它。我可能很愚蠢,但有人能告诉我这里发生了什么吗 package guitartuner; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.text.*; import java.awt.image.*; import java.io.*
package guitartuner;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
public class GuitarTuner extends JFrame{
private JFrame mainFrame;
private JLabel EJLabel, AJLabel, DJLabel, GJLabel, BJLabel, eJLabel, guitarJLabel,
bassJLabel, loopJLabel;
private JPanel controlPanel;
private JButton EButton, AButton, DButton, GButton, BButton, eButton;
public class LoadImageApp extends Component{
BufferedImage img;
public void paint(Graphics g){
g.drawImage(img, 0, 0, null);
}
public LoadImageApp(){
try{
img = ImageIO.read(new File("/Users/Yojimbo/NetBeansProjects/guitarTuner/src/guitartuner/headstock.jpg"));
} catch (IOException e){
}
}
public Dimension getPreferredSize() {
if (img == null) {
return new Dimension(500,500);
} else {
return new Dimension(img.getWidth(null), img.getHeight(null));
}
}
}
public GuitarTuner(){
createUserInterface();
}
public void createUserInterface(){
JFrame f = new JFrame("Guitar Tuner");
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
f.add(new LoadImageApp());
f.setLayout(new FlowLayout());
EButton = new JButton();
EButton.setBounds(0, 0, 50, 10);
EButton.setText("E");
f.add(EButton);
AButton = new JButton();
AButton.setBounds(40, 40, 50, 10);
AButton.setText("A");
f.add(AButton);
DButton = new JButton();
DButton.setBounds(60, 60, 50, 10);
DButton.setText("D");
f.add(DButton);
GButton = new JButton();
GButton.setBounds(20, 100, 50, 10);
GButton.setText("G");
f.add(GButton);
BButton = new JButton();
BButton.setBounds(40, 100, 50, 10);
BButton.setText("B");
f.add(BButton);
eButton = new JButton();
eButton.setBounds(60, 100, 50, 10);
eButton.setText("e");
f.add(eButton);
f.pack();
f.setTitle("Aaron's Awesome Guitar Tuner");
f.setSize (400, 575);
f.setVisible(true);
}
public static void main(String[] args) {
GuitarTuner application = new GuitarTuner();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
尝试使用GridBagLayout。花点时间读一下。这可能会帮助你,尤其是如果你想把按钮放在你想要的位置上
尝试使用GridBagLayout。花点时间读一下。这可能会帮助你,尤其是如果你想把按钮放在你想要的位置上
您也可以在createUserInterface()方法的开头添加这些行 编辑:如果这样做,还必须删除LoadImageApp实例的f.add(…)
public void createUserInterface() throws IOException {
BufferedImage img = ImageIO.read(new File("/Users/Yojimbo/NetBeansProjects/guitarTuner/src/guitartuner/headstock.jpg"));
JFrame f = new JFrame("Guitar Tuner");
JPanel contentPane = new JPanel(){
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
}
};
f.setContentPane(contentPane);
...
您还可以在createUserInterface()方法的开头添加这些行 编辑:如果这样做,还必须删除LoadImageApp实例的f.add(…)
public void createUserInterface() throws IOException {
BufferedImage img = ImageIO.read(new File("/Users/Yojimbo/NetBeansProjects/guitarTuner/src/guitartuner/headstock.jpg"));
JFrame f = new JFrame("Guitar Tuner");
JPanel contentPane = new JPanel(){
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
}
};
f.setContentPane(contentPane);
...
如果希望组件彼此重叠,可以使用JLayeredPane 见:
您可以将LoadImageApp放在一个层中,将另一个JPanel放在上面的一个层中,其中FlowLayout包含按钮。如果您希望组件彼此重叠,可以使用JLayeredPane 见: 您可以将LoadImageApp放在一个层中,将另一个JPanel放在上面的一个层中,其中FlowLayout包含按钮
LoadImageApp
,而是从JPanel
paintComponent
方法而不是paint
FlowLayout
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
public class GuitarTuner extends JFrame {
private JFrame mainFrame;
private JLabel EJLabel, AJLabel, DJLabel, GJLabel, BJLabel, eJLabel, guitarJLabel, bassJLabel, loopJLabel;
private JPanel controlPanel;
private JButton EButton, AButton, DButton, GButton, BButton, eButton;
public class LoadImageApp extends JPanel {
BufferedImage img;
public void paintComponent(Graphics g) {
g.drawImage(img, 0, 0, null);
}
public LoadImageApp() {
super(new FlowLayout());
try {
img = ImageIO
.read(new File("/Users/Yojimbo/NetBeansProjects/guitarTuner/src/guitartuner/headstock.jpg"));
} catch (IOException e) {
}
}
public Dimension getPreferredSize() {
if (img == null) {
return new Dimension(500, 500);
} else {
return new Dimension(img.getWidth(null), img.getHeight(null));
}
}
}
public GuitarTuner() {
createUserInterface();
}
public void createUserInterface() {
JFrame f = new JFrame("Guitar Tuner");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
LoadImageApp panel = new LoadImageApp();
f.add(panel);
EButton = new JButton();
EButton.setBounds(0, 0, 50, 10);
EButton.setText("E");
panel.add(EButton);
AButton = new JButton();
AButton.setBounds(40, 40, 50, 10);
AButton.setText("A");
panel.add(AButton);
DButton = new JButton();
DButton.setBounds(60, 60, 50, 10);
DButton.setText("D");
panel.add(DButton);
GButton = new JButton();
GButton.setBounds(20, 100, 50, 10);
GButton.setText("G");
panel.add(GButton);
BButton = new JButton();
BButton.setBounds(40, 100, 50, 10);
BButton.setText("B");
panel.add(BButton);
eButton = new JButton();
eButton.setBounds(60, 100, 50, 10);
eButton.setText("e");
panel.add(eButton);
f.pack();
f.setTitle("Aaron's Awesome Guitar Tuner");
f.setSize(400, 575);
f.setVisible(true);
}
public static void main(String[] args) {
GuitarTuner application = new GuitarTuner();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
LoadImageApp
,而是从JPanel
paintComponent
方法而不是paint
FlowLayout
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
public class GuitarTuner extends JFrame {
private JFrame mainFrame;
private JLabel EJLabel, AJLabel, DJLabel, GJLabel, BJLabel, eJLabel, guitarJLabel, bassJLabel, loopJLabel;
private JPanel controlPanel;
private JButton EButton, AButton, DButton, GButton, BButton, eButton;
public class LoadImageApp extends JPanel {
BufferedImage img;
public void paintComponent(Graphics g) {
g.drawImage(img, 0, 0, null);
}
public LoadImageApp() {
super(new FlowLayout());
try {
img = ImageIO
.read(new File("/Users/Yojimbo/NetBeansProjects/guitarTuner/src/guitartuner/headstock.jpg"));
} catch (IOException e) {
}
}
public Dimension getPreferredSize() {
if (img == null) {
return new Dimension(500, 500);
} else {
return new Dimension(img.getWidth(null), img.getHeight(null));
}
}
}
public GuitarTuner() {
createUserInterface();
}
public void createUserInterface() {
JFrame f = new JFrame("Guitar Tuner");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
LoadImageApp panel = new LoadImageApp();
f.add(panel);
EButton = new JButton();
EButton.setBounds(0, 0, 50, 10);
EButton.setText("E");
panel.add(EButton);
AButton = new JButton();
AButton.setBounds(40, 40, 50, 10);
AButton.setText("A");
panel.add(AButton);
DButton = new JButton();
DButton.setBounds(60, 60, 50, 10);
DButton.setText("D");
panel.add(DButton);
GButton = new JButton();
GButton.setBounds(20, 100, 50, 10);
GButton.setText("G");
panel.add(GButton);
BButton = new JButton();
BButton.setBounds(40, 100, 50, 10);
BButton.setText("B");
panel.add(BButton);
eButton = new JButton();
eButton.setBounds(60, 100, 50, 10);
eButton.setText("e");
panel.add(eButton);
f.pack();
f.setTitle("Aaron's Awesome Guitar Tuner");
f.setSize(400, 575);
f.setVisible(true);
}
public static void main(String[] args) {
GuitarTuner application = new GuitarTuner();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
所以我不是来告诉你你的密码的我不是说真的。。。我的意思是,为什么我的按钮拒绝放在我的图像上呢。但是如果你想变得粗鲁,浪费你和我的时间,那就继续吧…所以我不是来告诉你你的代码的。我不是说真的。。。我的意思是,为什么我的按钮拒绝放在我的图像上呢。但是如果你想变得粗鲁,浪费你和我的时间,那就去吧。。。