2016-04-10 5 views
0

Так что я пытаюсь поставить изображения друг на друга, и потому что я храню эти изображения на jbuttons, я хочу знать, есть ли способ поместить jbuttons поверх моих уже существующих jbuttons. Любая помощь пожалуйста.Как поставить JButton с изображением поверх другого JButton с изображением?

Edit: Так скажем, у меня есть
Jbutton b = new JButton() и я установить его значок изображения. , тогда у меня есть еще JButton x = new JButton() и установите его значок изображения.

Эти JButtons содержат два разных значка. и я хочу, чтобы изображения перекрывались друг с другом. Я хочу, чтобы оба изображения отображались с нижней кнопкой, являющейся большим изображением, а кнопка сверху имела меньший размер. Не уверен, что это ясно.

+0

Пожалуйста, поделитесь тем, что вы попробовали? Трудно понять, что вы хотите. – rdonuk

ответ

-1

Самое простое решение этого

JButton j1=new JButton("a"); 
j1.setLayout(new BorderLayout()); 
j1.setBackground(Color.red); 
add(j1); 
JButton j2=new JButton("b"); 
j2.setBackground(Color.yellow); 
j1.add("Center", j2); 

-

Хотя обычно не используется, нулевая раскладка решение здесь, если вы хотите, чтобы указать конкретное местоположение и размер:

JButton j1=new JButton("a"); 
j1.setLayout(null); 
j1.setBackground(Color.red); 
JButton j2=new JButton("b"); 
j2.setBackground(Color.yellow); 
j2.setBounds(100, 100, 50, 50); 
j1.add(j2); 
add(j1); 
+0

Большое спасибо за вашу помощь. Это помогло мне это решить. Однако, добавив jbuttons друг на друга, второй jbutton не изменяет размер, когда я пытаюсь изменить размер. Независимо от того, какой размер я ему даю, второй jbutton всегда один и тот же. Любые советы по этому поводу? – Kisuna97

+1

(1-) для указания нулевого макета, особенно когда уже получено правильное решение. Это вызовет другие проблемы, которые OP еще не нашел. @ Kisuna97, «Любые советы по этому поводу?» - да, я дал вам ответ. Не делайте коротких сокращений. Существует причина, по которой короткие сокращения не работают в долгосрочной перспективе. – camickr

+0

@camickr при использовании OverlayLayout, как бы вы изменили размер дочерней кнопки? Использование 'setSize()' и 'setPreferredSize()' тоже не работает. – Kisuna97

2

Вы можете использовать OverlayLayout для складывания компонентов друг над другом.

import java.awt.*; 
import javax.swing.*; 

public class SSCCE extends JPanel 
{ 
    public SSCCE() 
    { 
     setLayout(new OverlayLayout(this)); 

     JButton child = new JButton(new ImageIcon("child.jpg")); 
     child.setAlignmentX(JButton.CENTER_ALIGNMENT); 
     child.setAlignmentY(JButton.CENTER_ALIGNMENT); 

     JButton parent = new JButton(new ImageIcon("parent.jpg")); 
     parent.setAlignmentX(JButton.CENTER_ALIGNMENT); 
     parent.setAlignmentY(JButton.CENTER_ALIGNMENT); 

     add(child); 
     add(parent); 
    } 

    @Override 
    public boolean isOptimizedDrawingEnabled() 
    { 
     return false; 
    } 

    private static void createAndShowGUI() 
    { 
     JFrame frame = new JFrame("SSCCE"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new SSCCE()); 
     frame.setLocationByPlatform(true); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(() -> createAndShowGUI()); 
/* 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowGUI(); 
      } 
     }); 
*/ 
    } 
} 

Нормально окрашенный код предполагает, что макет менеджеров размещает компоненты в 2-х измерениях. Однако в этом случае вам необходимо переопределить метод isOptimizedDrawingEnabled(), чтобы указать, что компоненты сложены. Это делает картину немного менее эффективной, но она необходима для правильной окраски компонентов.

+0

Так что я должен использовать overlayLayout на jpanel для этого. Поскольку у меня уже есть панель из 49 кнопок, и все, что я хочу, это наложить несколько кнопок на верхней панели. чтобы сделать ваш метод, мне нужно было бы создать как 49 jpanels, а затем наложить на каждую панель – Kisuna97

+0

@ Kisuna97, вы могли бы использовать JLabels. Установите макет родителя в BorderLayout, а затем добавьте его в родительский. – camickr

+0

так что вы говорите, чтобы использовать JLabels? Но я не вижу, где это происходит, где я могу иметь 3 компонента в 1 месте. Но я могу использовать что-то вроде 49 панелей в 7 на 7 и добавить столько компонентов, сколько хочу, используя overlayLayOut правильно? – Kisuna97

Смежные вопросы