दिलचस्प पोस्ट
क्या सीएसएस में एक है: ब्लर चयनकर्ता (छद्म-क्लास)? पायथन URL लिब / यूआरएल लिब 2 पोस्ट किसी दिए गए कुंजी के प्रत्येक आवृत्ति के लिए सबसे हाल की पंक्ति प्राप्त करने के लिए SQL क्वेरी सी # एचटीटीपीएलस्टनर के साथ यूआरएल मैपिंग क्या जावा कास्टिंग ओवरहेड का परिचय है? क्यूं कर? एसक्यूएल सर्वर 2008 में XML फ़ील्ड से मान चुनें विस्तारित फ़ाइल विशेषताओं को प्राप्त करने के लिए VBA का उपयोग करना कैसे जावा में एक जावा स्ट्रिंग literally unescape? जावा में मेमोरी कैसे मुक्त हो? अजगर से प्रवाही प्रक्रिया प्रक्रिया निकास कोड के आधार पर शेल स्क्रिप्ट से बाहर निकलें किसी भी यूजर इंटरफेस के बिना वेब एपीआई में टोकन आधारित प्रमाणीकरण क्रोम एक्सटेंशन से अद्वितीय ClientID हो रही है? पायथन नंबर स्ट्रिंग 0 से शुरू नहीं कर सकता। क्यों? ProgressDialog नहीं दिखाया गया जब AsyncTask.get () कहा जाता है

ग्लास फलक पर घटक रखकर

मेरे पास जेएलैबल का एक उप वर्ग है जो मेरे जीयूआई के एक घटक का निर्माण करता है मैंने एक कंटेनर से दूसरे घटक को खींचने और छोड़ने की क्षमता को लागू किया है, लेकिन बिना किसी दृश्य प्रभाव के मैं इस जेएलैबल को एक कंटेनर से दूसरे में खींचने के दौरान कर्सर का अनुसरण करना चाहता हूं मुझे लगा कि मैं सिर्फ एक ग्लास फलक बना सकता हूं और इसे वहां पर खींचना चाहता हूं। हालांकि, कांच फलक में घटक जोड़ने के बाद भी, घटक को दिखाई देता है, और ग्लास फलक को दिखाई देता है, और ग्लास फलक को अपारदर्शी के रूप में सेट करता हूं, मैं अभी भी घटक नहीं देखता मुझे पता है कि घटक काम करता है क्योंकि मैं इसे सामग्री फलक में जोड़ सकता हूं और इसे दिखाया है I

मैं ग्लास फलक में एक घटक कैसे जोड़ूं?


आखिरकार यह सोचा था कि सरल उदाहरण कैसे काम करना है। धन्यवाद, @ सफ़। मैं इस समाधान को मेरी मूल समस्या से अनुकूलित करने में सक्षम था, जिससे मुझे जावा 2 डी कोड की ~ 60 लाइनों को निकालने की अनुमति मिल गई थी, जो मैन्युअल रूप से जेएलैबल का प्रतिनिधित्व करते थे।

package test; import java.awt.Color; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.LineBorder; public class MainFrame extends JFrame { /** * @param args */ public static void main(String[] args) { MainFrame mf = new MainFrame(); mf.setSize(400, 400); mf.setLocationRelativeTo(null); mf.setDefaultCloseOperation(DISPOSE_ON_CLOSE); mf.setGlassPane(new JPanel()); JLabel l = new JLabel(); l.setText("Hello"); l.setBorder(new LineBorder(Color.BLACK, 1)); l.setBounds(10, 10, 50, 20); l.setBackground(Color.RED); l.setOpaque(true); l.setPreferredSize(l.getSize()); //mf.add(l); ((JPanel)mf.getGlassPane()).add(l); mf.getGlassPane().setVisible(true); mf.setVisible(true); } } 

वेब के समाधान से एकत्रित समाधान "ग्लास फलक पर घटक रखकर"

पहले से ही प्रदान की गई लेयरपेन उदाहरणों के लिए पॉइंटर्स के अलावा, आपके लेबल के पसंदीदा आकार की सेटिंग के आसपास आपके मूल कोड केंद्रों के साथ समस्या। जेलेबेल आकार के होने से पहले आप इसे सेट करते हैं, तो आपका:

 l.setPreferredSize(l.getSize()); 

अप्रभावी है अगर, दूसरी तरफ, आप कॉल करने के बाद अपनी कॉल setBounds , तो आप अपने इच्छित परिणाम देखेंगे। इसे ध्यान में रखते हुए, इसे पुन: क्रम दें:

 l.setPreferredSize(l.getSize()); l.setBounds(10, 10, 50, 20); 

इस तरह दिखने के लिए:

 l.setBounds(10, 10, 50, 20); l.setPreferredSize(l.getSize()); 

नीचे दिया गया उदाहरण कोड दिखाता है कि शतरंज बोर्ड के आसपास एक शतरंज टुकड़ा कैसे खींचें। यह एक ग्लास फलक के बजाय जेलेरेडेपैन का उपयोग करता है, लेकिन मुझे यकीन है कि ये अवधारणाएं समान होंगी। अर्थात्:

क) रूट फलक में कांच फलक जोड़ें
ख) ग्लास फलक को दृश्यमान बनाओ
ग) घटक को ग्लास फलक में जोड़कर सुनिश्चित करें कि सीमाएं वैध हैं
डी) घटक का ड्रैगिंग चेतन करने के लिए setLocation () का उपयोग करें

संपादित करें: SSCCE को ठीक करने के लिए जोड़ा गया कोड

 JLabel l = new JLabel(); l.setText("Hello"); l.setBorder(new LineBorder(Color.BLACK, 1)); // l.setPreferredSize(l.getSize()); // l.setBounds(10, 10, 50, 20); ((JPanel)mf.getGlassPane()).add(l); mf.setVisible(true); mf.getGlassPane().setVisible(true); 

लेआउट प्रबंधक का उपयोग करते समय आप setSize () या setBounds () विधियों का उपयोग नहीं करते हैं आपके मामले में आप (0, 0) में पसंदीदा आकार सेट करते हैं क्योंकि यह सभी घटकों का डिफ़ॉल्ट आकार है

जब आप फ़्रेम को लेबल जोड़ते हैं, तो यह काम करता है क्योंकि फ्रेम की सामग्री फलक के लिए डिफ़ॉल्ट लेआउट मैनेजर सीमा लेआउट है, इसलिए लेबल के पसंदीदा आकार को नजरअंदाज किया जाता है और लेबल को फ्रेम का आकार बना दिया जाता है

हालांकि, डिफ़ॉल्ट रूप से एक जेपीएनएल एक फ्लो लेआउट का उपयोग करता है जो घटक के पसंदीदा आकार का सम्मान करता है। चूंकि पसंदीदा आकार 0 है, इसलिए पेंट करने के लिए कुछ नहीं है।

इसके अलावा, ग्लास फलक को पेंट करने के लिए दृश्यमान बनाने की आवश्यकता होती है।

मेरा सुझाव है कि आप स्विंग ट्यूटोरियल पढ़ते हैं। इस पर अनुभाग हैं कि लेआउट मैनेजर कैसे कार्य करते हैं और कैसे कांच के पेन्स काम करते हैं और प्रत्येक अनुभाग में काम करने वाले उदाहरण हैं।

संपादित करें: नीचे जोड़ा गया उदाहरण कोड:

 import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; public class ChessBoard extends JFrame implements MouseListener, MouseMotionListener { JLayeredPane layeredPane; JPanel chessBoard; JLabel chessPiece; int xAdjustment; int yAdjustment; public ChessBoard() { Dimension boardSize = new Dimension(600, 600); // Use a Layered Pane for this this application layeredPane = new JLayeredPane(); layeredPane.setPreferredSize( boardSize ); layeredPane.addMouseListener( this ); layeredPane.addMouseMotionListener( this ); getContentPane().add(layeredPane); // Add a chess board to the Layered Pane chessBoard = new JPanel(); chessBoard.setLayout( new GridLayout(8, 8) ); chessBoard.setPreferredSize( boardSize ); chessBoard.setBounds(0, 0, boardSize.width, boardSize.height); layeredPane.add(chessBoard, JLayeredPane.DEFAULT_LAYER); // Build the Chess Board squares for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { JPanel square = new JPanel( new BorderLayout() ); square.setBackground( (i + j) % 2 == 0 ? Color.red : Color.white ); chessBoard.add( square ); } } // Add a few pieces to the board ImageIcon duke = new ImageIcon("dukewavered.gif"); // add an image here JLabel piece = new JLabel( duke ); JPanel panel = (JPanel)chessBoard.getComponent( 0 ); panel.add( piece ); piece = new JLabel( duke ); panel = (JPanel)chessBoard.getComponent( 15 ); panel.add( piece ); } /* ** Add the selected chess piece to the dragging layer so it can be moved */ public void mousePressed(MouseEvent e) { chessPiece = null; Component c = chessBoard.findComponentAt(e.getX(), e.getY()); if (c instanceof JPanel) return; Point parentLocation = c.getParent().getLocation(); xAdjustment = parentLocation.x - e.getX(); yAdjustment = parentLocation.y - e.getY(); chessPiece = (JLabel)c; chessPiece.setLocation(e.getX() + xAdjustment, e.getY() + yAdjustment); layeredPane.add(chessPiece, JLayeredPane.DRAG_LAYER); layeredPane.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); } /* ** Move the chess piece around */ public void mouseDragged(MouseEvent me) { if (chessPiece == null) return; // The drag location should be within the bounds of the chess board int x = me.getX() + xAdjustment; int xMax = layeredPane.getWidth() - chessPiece.getWidth(); x = Math.min(x, xMax); x = Math.max(x, 0); int y = me.getY() + yAdjustment; int yMax = layeredPane.getHeight() - chessPiece.getHeight(); y = Math.min(y, yMax); y = Math.max(y, 0); chessPiece.setLocation(x, y); } /* ** Drop the chess piece back onto the chess board */ public void mouseReleased(MouseEvent e) { layeredPane.setCursor(null); if (chessPiece == null) return; // Make sure the chess piece is no longer painted on the layered pane chessPiece.setVisible(false); layeredPane.remove(chessPiece); chessPiece.setVisible(true); // The drop location should be within the bounds of the chess board int xMax = layeredPane.getWidth() - chessPiece.getWidth(); int x = Math.min(e.getX(), xMax); x = Math.max(x, 0); int yMax = layeredPane.getHeight() - chessPiece.getHeight(); int y = Math.min(e.getY(), yMax); y = Math.max(y, 0); Component c = chessBoard.findComponentAt(x, y); if (c instanceof JLabel) { Container parent = c.getParent(); parent.remove(0); parent.add( chessPiece ); parent.validate(); } else { Container parent = (Container)c; parent.add( chessPiece ); parent.validate(); } } public void mouseClicked(MouseEvent e) {} public void mouseMoved(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public static void main(String[] args) { JFrame frame = new ChessBoard(); frame.setDefaultCloseOperation( DISPOSE_ON_CLOSE ); frame.setResizable( false ); frame.pack(); frame.setLocationRelativeTo( null ); frame.setVisible(true); } } 

हालांकि प्रश्न के लिए स्पर्शरेखा, JLayeredPane द्वारा उद्धृत JLayeredPane उदाहरण , निम्नलिखित अनुकूलन को स्वीकार करता है, जो किसी मौजूदा घटक पर mouseReleased() के प्रभाव को हाइलाइट करता है।

 public ChessBoard() { ... // Add a few pieces to the board addPiece(3, 0, "♛"); addPiece(4, 0, "♚"); addPiece(3, 7, "♕"); addPiece(4, 7, "♔"); } static Font font = new Font("Sans", Font.PLAIN, 72); private void addPiece(int col, int row, String glyph) { JLabel piece = new JLabel(glyph, JLabel.CENTER); piece.setFont(font); JPanel panel = (JPanel) chessBoard.getComponent(col + row * 8); panel.add(piece); } 

चूंकि मैं लंबे समय से स्विंग पर रोमेन गेय के ब्लॉगों का पालन कर रहा था। मेरे पास एक ऐसा लिंक है जिसमें आपको रुचि हो सकती है। उसने स्रोत को रिलीज़ किया – जिसने डीएनडी प्रभावों के लिए ग्लासपेन का इस्तेमाल किया

http://jroller.com/gfx/entry/drag_and_drop_effects_the

मैंने खुद डीजीडी पर फजी एनीमेशन / प्रभाव का इस्तेमाल कभी नहीं किया, इसलिए कोई और टिप्पणी नहीं कर सकता: – |