Добавьте сложное изображение в панель, с кнопками вокруг него в одном настраиваемом пользовательском интерфейсе

Как я могу получить это изображение, как slavePanel ниже, в slavePanel а поверх этого JPanel настроить JButtons который выглядит как изображение, но с правильными JButtons ? (Сейчас они сформированы в 1 ряд, 4 колонки)

введите описание изображения здесь

  // // Shot Gun mover up/down/left/right, middle on is for zoom // public void GunMover(JPanel configPanel) throws IOException { // Master Panel - holds everything JPanel masterPanel = new Panel(); masterPanel.setLayout(new SpringLayout()); // Slave Panel - with image background JPanel slavePanel = new Panel(); slavePanel.setLayout(new SpringLayout()); // Row 1 final JButton ptzLeft = new JButton(""); masterPanel.add(ptzRight, BorderLayout.CENTER); // Row 3 final JButton ptzUp = new JButton("^"); masterPanel.add(ptzUp, BorderLayout.WEST); // Row 4 final JButton ptzDown = new JButton("down"); masterPanel.add(ptzDown, BorderLayout.CENTER); // How do i add slavePanel this background and add all the JButtons // According to that image shape? // Layout the panel. SpringUtilities.makeCompactGrid(masterPanel, 1, 4, //rows, cols 6, 6, //initX, initY 6, 6); configPanel.setLayout(new GridLayout(0,1)); configPanel.add(masterPanel); } 

Последующий: Отличный от Andrew Thompson + по крайней мере мой сломанный метод

введите описание изображения здесь

 package test; import java.awt.*; import java.awt.font.FontRenderContext; import java.awt.font.TextLayout; import javax.swing.*; public class New extends JFrame { private static final long serialVersionUID = 1L; private ImageIcon errorIcon = (ImageIcon) UIManager.getIcon("OptionPane.errorIcon"); private Icon infoIcon = UIManager.getIcon("OptionPane.informationIcon"); private Icon warnIcon = UIManager.getIcon("OptionPane.warningIcon"); public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { New t = new New(); } }); } public New() { setLayout(new BorderLayout()); JPanel slavePanel = new NewPanel(); slavePanel.setLayout(new GridLayout(0, 2, 4, 4)); add(slavePanel); JButton button = new JButton(); button.setBorderPainted(false); button.setBorder(null); button.setFocusable(false); button.setMargin(new Insets(0, 0, 0, 0)); button.setContentAreaFilled(false); button.setIcon((errorIcon)); button.setRolloverIcon((infoIcon)); button.setPressedIcon(warnIcon); button.setDisabledIcon(warnIcon); slavePanel.add(button); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } } package test; import java.awt.*; import java.io.IOException; import java.io.InputStream; import javax.imageio.ImageIO; import javax.swing.*; import javax.swing.border.Border; public class NewPanel extends JPanel { private Image imageGui; private static Dimension screen; public NewPanel() { try { imageGui = ImageIO.read( (InputStream) NewPanel.class.getResourceAsStream( "/image/ptz.png")); } catch (IOException e) { e.printStackTrace(System.err); } Border border = BorderFactory.createEmptyBorder(11, 11, 11, 11); setOpaque(true); setBorder(border); setFocusable(true); setSize(getPreferredSize()); revalidate(); repaint(); setVisible(true); } public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(imageGui, 0, 0, imageGui.getWidth(null), imageGui.getHeight(null), null); revalidate(); repaint(); } @Override public Dimension getPreferredSize() { return new Dimension(imageGui.getWidth(null), imageGui.getHeight(null)); } } 

  1. Используйте 3×3 GridLayout
  2. Для каждой из 9 ячеек получается субимаг:
    • Для каждого второго компонента добавьте метку с изображением.
    • Для каждого другого компонента добавьте JButton из которого удалено пространство. Используйте значок в виде значка, но вам понадобятся альтернативные значки, указывающие фокус, активацию и т. Д. В этом примере красная рамка вокруг значка «нажата».

Компасные кнопки

 import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; import javax.swing.*; import java.io.IOException; import java.net.URL; import javax.imageio.ImageIO; public class CompassButtons { public CompassButtons(BufferedImage bi) { int w = bi.getWidth(); int h = bi.getHeight(); int step = w/3; JPanel p = new JPanel(new GridLayout(3,3)); p.setOpaque(false); int count = 0; for (int ii=0; ii 

Начиная с этого примера , я начал с изменения MoveButton следующим образом:

 this.setBorderPainted(false); 

Вы можете дать ControlPanel менеджер пользовательских макетов . Я также добавил бы фоновое изображение и некоторую визуальную обратную связь, основанную на состоянии ButtonModel , как это предлагается здесь .

1) вам нужно подготовить значки до и для каждых 5 JButtons ( событие здесь произошло от ButtonModel )

  • Базовая иконка без фокуса

  • Иконка для isRollover()

  • Значок для isPressed()

2) как установить значки и удалить все «баласт» из JButton

3) поместите эти 5 JButtons в JPanel с окрашенными кружками (RemoteSet)

  • Повернуть прямоугольник Java Graphics2D?
  • Рамки графического интерфейса Java. Что выбрать? Swing, SWT, AWT, SwingX, JGoodies, JavaFX, Apache Pivot?
  • Новая линия в JLabel
  • Создание пользовательского JButton из изображений, содержащих прозрачные пиксели
  • Как отлаживать макеты Java Swing
  • Настройка настраиваемого шрифта
  • Занятая петля в других затягиваниях streamа EDT
  • Настройка фоновых изображений в JFrame
  • Как добавить строку в JTable?
  • Использование DocumentFilter.FilterBypass
  • Как настроить столбцы JTable для размещения самого длинного содержимого в ячейках столбца
  • Давайте будем гением компьютера.